Bi-LSTM + CRF
Bi-LSTM + CRF
개요
Bi-LSTM + CRF는 자연어 처리(Natural Language Processing, NLP) 분야에서 널리 사용되는 시퀀스 레이블링(sequence labeling)을 위한 딥러닝 모델 구조입니다. 이 모델은 양방향 장단기 기억 장치(Bidirectional Long Short-Term Memory, Bi-LSTM)와 조건부 확률 장(Conditional Random Field, CRF)을 결합하여, 텍스트의 문맥 정보를 효과적으로 포착하고 레이블 간의 전이 관계를 고려함으로써 높은 정확도를 달성합니다.
주로 개체명 인식(Named Entity Recognition, NER), 품사 태깅(Part-of-Speech Tagging), 의미 역할 인식(Semantic Role Labeling) 등의 과제에 사용되며, 특히 레이블 간 의존성이 중요한 상황에서 전통적인 단독 Bi-LSTM 모델보다 우수한 성능을 보입니다.
구성 요소
1. Bi-LSTM (Bidirectional LSTM)
LSTM(Long Short-Term Memory)은 순차적 데이터에서 장기 의존성(long-term dependencies)을 효과적으로 학습할 수 있도록 설계된 RNN(Recurrent Neural Network)의 한 변형입니다. 그러나 단일 LSTM은 이전 시점의 정보만을 고려하므로, 특정 단어의 의미를 파악할 때 뒤에 나오는 문맥을 반영하지 못합니다.
이를 해결하기 위해 도입된 것이 Bi-LSTM입니다. Bi-LSTM은 두 개의 LSTM 레이어를 사용합니다:
- 정방향 LSTM(Forward LSTM): 시퀀스의 처음부터 끝까지 정보를 처리
- 역방향 LSTM(Backward LSTM): 시퀀스의 끝부터 처음까지 정보를 처리
이 두 방향의 출력을 결합하면, 각 토큰(예: 단어)에 대해 앞뒤 문맥을 모두 반영한 히든 상태(hidden state)를 얻을 수 있습니다. 이 히든 상태는 각 단어의 풍부한 문맥 정보를 포함하게 됩니다.
2. CRF (Conditional Random Field)
CRF는 조건부 확률 모델로, 입력 시퀀스가 주어졌을 때 출력 레이블 시퀀스의 전체 확률을 모델링합니다. Bi-LSTM은 각 위치에서 독립적으로 레이블을 예측하지만, 레이블 간의 전이 가능성(예: "B-PER" 다음에 "I-PER"이 올 수 있으나 "B-LOC"는 올 수 없음)을 고려하지 못하는 단점이 있습니다.
CRF 레이어는 이러한 레이블 전이 점수(transition scores)를 학습하여, 전체 시퀀스 레이블의 일관성을 보장합니다. 예를 들어, CRF는 "B-ORG" 다음에 "I-ORG"가 올 가능성을 높이고, "B-ORG" 다음에 "B-PER"가 올 가능성은 낮추도록 학습합니다.
모델 아키텍처
Bi-LSTM + CRF 모델은 다음과 같은 순서로 구성됩니다:
- 임베딩 레이어: 각 단어를 밀집 벡터(dense vector)로 변환 (Word2Vec, GloVe, 또는 학습 가능한 임베딩 사용)
- Bi-LSTM 레이어: 임베딩된 시퀀스를 처리하여 각 토큰에 대한 문맥 기반 히든 상태 생성
- 출력 레이어: Bi-LSTM의 출력을 레이블 클래스 수만큼의 점수(logit)로 매핑
- CRF 레이어: 출력 점수를 바탕으로 레이블 전이 점수를 결합하여 전체 시퀀스의 조건부 확률 계산
수학적 표현
CRF는 입력 시퀀스 ( X = (x_1, x_2, ..., x_n) )와 출력 레이블 시퀀스 ( Y = (y_1, y_2, ..., y_n) )에 대해 다음과 같은 조건부 확률을 정의합니다:
[ P(Y|X) = \frac{1}{Z(X)} \exp\left( \sum_{i=1}^n \left( \theta(y_i, x_i) + A(y_{i-1}, y_i) \right) \right) ]
여기서: - ( \theta(y_i, x_i) ): Bi-LSTM 출력으로부터 얻은 단어 ( x_i )에 레이블 ( y_i )를 붙일 스코어 - ( A(y_{i-1}, y_i) ): 레이블 ( y_{i-1} )에서 ( y_i )로 전이할 때의 전이 점수 - ( Z(X) ): 정규화 항 (partition function)
학습 시, 이 조건부 확률의 로그 가능도를 최대화합니다.
장점
- 문맥 정보의 포괄적 활용: Bi-LSTM이 앞뒤 문맥을 모두 고려
- 레이블 일관성 보장: CRF가 레이블 전이 제약을 학습하여 비논리적인 레이블 시퀀스를 억제
- 엔드 투 엔드 학습 가능: 전체 모델을 하나의 신경망으로 구성하여 기울기 기반 최적화 가능
- 높은 정확도: 특히 NER와 같은 과제에서 SOTA(SOTA: State-of-the-Art) 모델 등장 전까지 강력한 성능을 보임
활용 사례
| 과제 | 설명 |
|---|---|
| 개체명 인식 (NER) | 사람, 조직, 위치 등 고유명사를 식별하고 분류 (예: "서울" → B-LOC) |
| 품사 태깅 (POS Tagging) | 각 단어에 품사를 부여 (예: "달리다" → 동사) |
| 의미 역할 인식 (SRL) | 문장 내에서 동사와 그에 수식되는 논리적 역할(주어, 목적어 등)을 레이블링 |
| 의도 분석 및 슬롯 추출 | 대화 시스템에서 사용자 발화의 의도와 관련 정보 추출 |
구현 예시 (PyTorch 기반)
import torch
import torch.nn as nn
from torchcrf import CRF
class BiLSTM_CRF(nn.Module):
def __init__(self, vocab_size, tag_to_ix, embedding_dim, hidden_dim):
super(BiLSTM_CRF, self).__init__()
self.embedding = nn.Embedding(vocab_size, embedding_dim)
self.lstm = nn.LSTM(embedding_dim, hidden_dim // 2, bidirectional=True)
self.hidden2tag = nn.Linear(hidden_dim, len(tag_to_ix))
self.crf = CRF(len(tag_to_ix), batch_first=True)
def forward(self, sentence):
embeds = self.embedding(sentence)
lstm_out, _ = self.lstm(embeds)
emissions = self.hidden2tag(lstm_out)
return emissions # CRF 레이어에서 loss 계산 시 사용
def loss(self, emissions, tags):
return -self.crf(emissions, tags, reduction='mean')
def decode(self, emissions):
return self.crf.decode(emissions)
참고:
[torchcrf](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/Python/torchcrf)라이브러리는 CRF 계층을 쉽게 구현할 수 있도록 도와줍니다.
관련 기술 및 발전 방향
- BERT + CRF: 사전 훈련된 언어 모델(BERT)을 Bi-LSTM 대신 사용하여 더 강력한 문맥 표현을 추출
- Transformer + CRF: 어텐션 기반 모델과 CRF 결합으로 장거리 의존성과 레이블 전이 동시 처리
- Global Normalization: CRF는 전역 정규화(global normalization)를 통해 레이블 시퀀스의 전체 구조를 고려
참고 자료
- Huang, Z., Xu, W., & Yu, K. (2015). Bidirectional LSTM-CRF Models for Sequence Tagging. arXiv:1508.01991
- Lafferty, J., McCallum, A., & Pereira, F. (2001). Conditional Random Fields: Probabilistic Models for Segmenting and Labeling Sequence Data. ICML
- PyTorch 공식 문서 및
pytorch-crf라이브러리 문서
관련 문서
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.